Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#курс #machinelearning
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Golang
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
@golang_books
Please open Telegram to view this post
VIEW IN TELEGRAM
Автор подробно объясняет, почему традиционное последовательное выполнение может приводить к узким местам в работе приложения и как горутины помогают решать эту проблему, обеспечивая эффективное распределение задач и улучшение отзывчивости программ.
Основные моменты статьи:
- Последовательное vs конкурентное выполнение:
Рассматривается, как традиционные программы выполняют задачи по очереди, что может создавать задержки, особенно при выполнении долгих операций, и почему для современных приложений важно использовать конкурентное выполнение.
- Конкурентность и параллелизм:
Объясняется разница между конкурентностью (одновременная работа нескольких задач, даже на одном ядре) и параллелизмом (реальное одновременное выполнение на разных ядрах).
- Горутины в Go:
Показано, как с помощью ключевого слова go можно запускать функции в виде легковесных потоков (горутин), что позволяет выполнять задачи параллельно без накладных расходов, свойственных обычным потокам ОС.
- Синхронизация горутин:
Рассмотрены способы синхронизации, в том числе использование sync.WaitGroup для ожидания завершения всех горутин, что является более надежным методом по сравнению с time.Sleep.
- Коммуникация через каналы:
Описаны принципы работы с каналами (как с буферизированными, так и безбуферными), которые позволяют безопасно передавать данные между горутинами и синхронизировать их работу.
- Предотвращение гонок данных:
Обсуждаются подходы к избежанию гонок, когда несколько горутин одновременно обращаются к общим данным, с использованием каналов и мьютексов (sync.Mutex).
- Паттерны конкурентности:
Приводятся популярные шаблоны проектирования, такие как Fan-Out/Fan-In и Worker Pools, которые помогают масштабировать выполнение задач в реальных приложениях.
- Практический пример:
В статье приведён пример реализации простого конкурентного веб-сервера, где горутины используются для обработки запросов (например, вычисления факториала), что демонстрирует практическую пользу конкурентного подхода.
- Лучшие практики:
Завершается статья рекомендациями по эффективному использованию горутин в производственном коде: управление количеством запущенных горутин, правильное использование синхронизации и применение инструментов для выявления гонок.
▪ Читать
@golang_books
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Golang
This media is not supported in your browser
VIEW IN TELEGRAM
Самое главное:
▪ В 10 раз (!) быстрее компиляция, в 2 раза меньше памяти просит;
▪ На видео как раз тест нового компилятора: 0.63 секунды против 3.35 на старом;
▪ Проект пилят с августа 2024, готово уже 80%;
Полный переход займёт годы 😢;
▪ В версии на Go не работает «манкипатчинг», что сделает API TypeScript более безопасным;
⚫ Планируют интеграцию с LLM (надеюсь, локальными);
⚫ Полный переход на TypeScript-Go не отменяет поддержку старой версии;
⚫ Кодовая база TypeScript в Go расходится с оригиналом, так что некоторые фичи (вроде JSDoc и JSX) могут полететь.
Проект в разработке с августа 2024, готово уже 80%.
Полное интервью с апдейтами тут глянуть на YouTube
▪Github: https://github.com/microsoft/typescript-go
▪Microsoft blog: https://devblogs.microsoft.com/typescript/typescript-native-port/
#dotnet #golang #programming #typescript #webdev
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Golang
This media is not supported in your browser
VIEW IN TELEGRAM
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Основная cуть:
• Рассматриваются лучшие практики и новые возможности для написания и проведения бенчмарков в Go 1.24.
• Автор делится опытом, демонстрирует примеры, объясняет, как правильно измерять производительность и избегать распространённых ошибок.
📌 Польза для разработчиков:
• Помогает оптимизировать приложения на Go, выявляя узкие места в производительности.
• Раскрывает улучшения и особенности новой версии, что важно для точного и эффективного тестирования кода.
• Предоставляет практические рекомендации, которые можно сразу применять в реальных проектах.
Эта статья будет особенно полезна тем, кто стремится повысить производительность своих приложений и глубже разобраться в нюансах бенчмаркинга на Go.
📌 Читать
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
▪ Атомарность операций: гарантирует, что каждая транзакция выполняется полностью или не выполняется вовсе, что существенно снижает риск ошибок и потери данных.
▪ Простота интеграции: интуитивно понятный API позволяет легко внедрять AtomixDB в проекты разного масштаба, от небольших приложений до распределённых систем.
▪ Масштабируемость: инструмент спроектирован с учётом современных требований к производительности, что делает его подходящим для высоконагруженных систем.
▪ Открытый исходный код: вы можете свободно изучать, модифицировать и расширять функциональность AtomixDB под специфические нужды вашего проекта.
Если вы ищете надёжное, эффективное и гибкое решение для управления данными с гарантией целостности, AtomixDB — отличный выбор для реализации современных приложений.
📌 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
«Go: Structs & Interfaces» на GetStream.io рассказывает о ключевых аспектах использования структур (structs) и интерфейсов (interfaces) в языке Go.
Основные моменты статьи:
Структуры (structs):
Рассматриваются как базовые составные типы данных, позволяющие группировать связанные поля вместе. Показаны примеры создания и использования структур для хранения информации.
Интерфейсы (interfaces):
Объясняется, как интерфейсы позволяют задавать набор методов для типов, обеспечивая абстракцию и полиморфизм. Особое внимание уделено тому, что реализация интерфейса происходит неявно — если тип содержит необходимые методы, он автоматически удовлетворяет интерфейсу.
Связь и применение:
Статья демонстрирует, как структуры и интерфейсы помогают создавать гибкую, модульную архитектуру кода, а также обсуждает лучшие практики, позволяющие эффективно использовать их для достижения чистоты и расширяемости программ.
В итоге, материал служит отличным руководством для понимания основ и тонкостей работы с типами в Go, делая акцент на важности композиции и абстракции в разработке.
📌 Читать
@golang_books
Основные моменты статьи:
Структуры (structs):
Рассматриваются как базовые составные типы данных, позволяющие группировать связанные поля вместе. Показаны примеры создания и использования структур для хранения информации.
Интерфейсы (interfaces):
Объясняется, как интерфейсы позволяют задавать набор методов для типов, обеспечивая абстракцию и полиморфизм. Особое внимание уделено тому, что реализация интерфейса происходит неявно — если тип содержит необходимые методы, он автоматически удовлетворяет интерфейсу.
Связь и применение:
Статья демонстрирует, как структуры и интерфейсы помогают создавать гибкую, модульную архитектуру кода, а также обсуждает лучшие практики, позволяющие эффективно использовать их для достижения чистоты и расширяемости программ.
В итоге, материал служит отличным руководством для понимания основ и тонкостей работы с типами в Go, делая акцент на важности композиции и абстракции в разработке.
📌 Читать
@golang_books
«Docker Cypress in 2025: How I've Perfected My E2E Testing Setup» гайд, в котором рассказывает о том, как автор усовершенствовал свою систему end-to-end тестирования, используя интеграцию Cypress с Docker.
Основное внимание уделяется тому, как создать стабильное, масштабируемое и воспроизводимое окружение для автоматизированного тестирования.
▪ Интеграция с Docker:
Автор объясняет, как использование контейнеров помогает стандартизировать тестовое окружение и устранять различия между локальной разработкой и CI/CD пайплайнами.
▪ Оптимизация процесса тестирования:
Подробно описываются шаги по настройке, конфигурации и оптимизации тестовой среды с Cypress в Docker, что позволяет ускорить и улучшить качество тестирования.
▪ Преимущества и вызовы:
Статья выделяет ключевые преимущества использования Docker в тестировании – от стабильности окружения до легкости масштабирования, а также обсуждаются возникающие проблемы и способы их решения.
▪ Современные практики CI/CD:
Рассматривается, как такая настройка вписывается в современные процессы непрерывной интеграции и доставки, делая тестирование более надежным и предсказуемым.
В итоге, статья будет полезна разработчикам и тестировщикам, которые хотят повысить эффективность своих e2e тестов и использовать передовые инструменты для создания более надежного тестового процесса.
📌 Читать
@golang_books
Основное внимание уделяется тому, как создать стабильное, масштабируемое и воспроизводимое окружение для автоматизированного тестирования.
▪ Интеграция с Docker:
Автор объясняет, как использование контейнеров помогает стандартизировать тестовое окружение и устранять различия между локальной разработкой и CI/CD пайплайнами.
▪ Оптимизация процесса тестирования:
Подробно описываются шаги по настройке, конфигурации и оптимизации тестовой среды с Cypress в Docker, что позволяет ускорить и улучшить качество тестирования.
▪ Преимущества и вызовы:
Статья выделяет ключевые преимущества использования Docker в тестировании – от стабильности окружения до легкости масштабирования, а также обсуждаются возникающие проблемы и способы их решения.
▪ Современные практики CI/CD:
Рассматривается, как такая настройка вписывается в современные процессы непрерывной интеграции и доставки, делая тестирование более надежным и предсказуемым.
В итоге, статья будет полезна разработчикам и тестировщикам, которые хотят повысить эффективность своих e2e тестов и использовать передовые инструменты для создания более надежного тестового процесса.
📌 Читать
@golang_books
Истоки и проблемы: В Go 1.18 появились типовые параметры и ограничения, которые требовали введения core types для унификации операций над обобщёнными типами. Однако это добавило сложности как в спецификацию языка, так и в понимание работы некоторых операций (например, срезов и индексирования) даже для негeneric-кода.
Изменения в Go 1.25: В предстоящем релизе Go 1.25 концепция core types была полностью удалена из спецификации. Вместо этого теперь используются более явные и понятные правила, что упрощает изучение языка и повышает ясность спецификации без изменения поведения существующего кода.
Таким образом, пост подчёркивает, что отказ от core types делает спецификацию Go проще и понятнее, одновременно открывая возможности для будущих улучшений языка.
🔗 Читать
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Поскольку стандартный компилятор Go не поддерживает PS2 и требует наличия операционной системы, автор использует TinyGo — компилятор для встраиваемых систем, который преобразует Go-код в LLVM IR, а затем в машинный код для целевой платформы.
Основные трудности связаны с архитектурой процессора PS2, известного как Emotion Engine, основанного на MIPS R5900.
Этот процессор поддерживает инструкции MIPS-III и MIPS-IV с некоторыми особенностями и отсутствием определённых функций. Автор использует SDK ps2dev, предоставляющий библиотеки для графики, ввода-вывода и других операций, однако сталкивается с необходимостью обеспечения совместимости с ABI N32 и другими специфическими требованиями.
Ricardo
Проект находится в стадии разработки, и планируется дальнейшая работа над поддержкой специфичных для PS2 функций, обработкой чисел с плавающей запятой и улучшением совместимости с LLVM.
📌 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 «Линейная алгебра»
Вторая лучшая книга по линейной алгебре с ~1000 практических задач.
Идеально для ИИ и машинного обучения.
Книга полностью бесплатна .
Прекрасно подходит для новичков.
📌 Книга
Вторая лучшая книга по линейной алгебре с ~1000 практических задач.
Идеально для ИИ и машинного обучения.
Книга полностью бесплатна .
Прекрасно подходит для новичков.
📌 Книга
В ней рассматриваются ключевые техники, сгруппированные в четыре основные категории:
1. Управление памятью и эффективность:
- Pooling объектов: Повторное использование объектов для снижения нагрузки на сборщик мусора и уменьшения накладных расходов на выделение памяти.
- Предварительное выделение памяти: Заранее задавать емкость срезов и карт для предотвращения дорогостоящих операций изменения размера.
- Выравнивание полей структур: Оптимизация расположения полей в структурах для минимизации заполнения и улучшения локальности данных.
- Избегание упаковки интерфейсов: Предотвращение скрытых выделений памяти путем отказа от ненужных преобразований типов к интерфейсам.
- Техники нулевого копирования: Минимизация копирования данных с использованием срезов и буферов.
- Эффективность памяти и сборщик мусора Go: Снижение нагрузки на сборщик мусора путем минимизации использования кучи и повторного использования памяти.
- Стековые выделения и анализ ускользания: Использование анализа ускользания для размещения значений в стеке, когда это возможно.
2. Конкурентность и синхронизация:
Пулы рабочих горутин: Контроль уровня конкурентности с помощью пулов фиксированного размера для ограничения использования ресурсов.
Атомарные операции и примитивы синхронизации: Использование атомарных операций или легковесных блокировок для управления общим состоянием.
Ленивая инициализация: Отсрочка выполнения затратных операций до момента, когда они действительно необходимы.
Совместное использование неизменяемых данных: Безопасное совместное использование данных между горутинами без блокировок путем обеспечения их неизменяемости.
goperf.dev
Эффективное управление контекстом: Использование пакета context для передачи тайм-аутов и сигналов отмены между горутинами.
3. Оптимизация ввода/вывода и пропускная способность:
Эффективное буферизирование: Использование буферизованных читателей/писателей для минимизации вызовов ввода/вывода.
Группировка операций: Объединение нескольких мелких операций для уменьшения количества раунд-трипов и повышения пропускной способности.
4. Оптимизация на уровне компилятора и настройка:
Использование флагов оптимизации компилятора: Применение флагов сборки, таких как
-gcflags и -ldflags,
для настройки производительности.Стековые выделения и анализ ускользания: Анализ того, какие значения переходят в кучу, чтобы помочь компилятору оптимизировать размещение памяти.
goperf.dev
Эти техники помогают разработчикам Go создавать более эффективные и производительные приложения, снижая задержки, улучшая использование памяти и повышая эффективность конкурентных операций.
🔗 Читать
@golang_books
Please open Telegram to view this post
VIEW IN TELEGRAM
Несмотря на то, что Go использует сборку мусора для управления памятью, команда столкнулась с необычной утечкой, связанной с объектами SqliteRows, SqliteStmt и SqliteConn.
Основные моменты статьи:
- Начало расследования: После сообщений от нескольких крупных клиентов о значительных проблемах с производительностью, команда начала собирать профили памяти и горутин, чтобы определить источник утечки.
- Исключение горутин: Анализ показал отсутствие накопления активных горутин, что позволило исключить утечки, связанные с ними.
- Обнаружение проблемы в драйвере SQLite3: График распределения объектов в памяти указал на утечку, связанную с драйвером SQLite3, используемым в приложении.
- Анализ финализаторов: Команда обнаружила, что недавно добавленный финализатор для SqliteRows может вызывать блокировку единственной горутины, ответственной за выполнение всех финализаторов в Go. Это приводило к накоплению неосвобожденных объектов и, как следствие, к утечке памяти.
Cyolo
- Использование инструмента goref: Для дальнейшего анализа команда применила инструмент goref, позволяющий картировать граф ссылок объектов в куче, что подтвердило отсутствие живых объектов, удерживающих утекшие данные, и указало на проблему в самом рантайме Go.
- Обнаружение блокировки в go-smb2: В конечном итоге было выявлено, что блокировка в пакете go-smb2 приводила к остановке горутины финализатора, что вызывало утечку памяти.
Cyolo
- Результаты и рекомендации: Команда сообщила о найденной проблеме сообществу Go, предложив улучшить документацию по финализаторам и внедрить метрики для обнаружения медленных или заблокированных очередей финализаторов.
Статья подчеркивает важность тщательного анализа и командной работы при решении сложных проблем в программировании, а также необходимость понимания внутренних механизмов используемого языка и его инструментов.
📌 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
📘 Using Signals With Go
Статья объясняет, как в Go обрабатывать сигналы ОС с помощью пакета os/signal.
🔹 signal.Notify(ch, signals...) — подписывает канал ch на сигналы
🔹 signal.Stop(ch) — отписывает
📦 Пример:
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
fmt.Println("Получен сигнал")
📦 Для корректного завершения (graceful shutdown) можно после SIGINT вызвать signal.Stop, остановить приём новых задач и дождаться завершения текущих.
🔗 Подробнее: https://www.calhoun.io/using-signals-with-go/
@golang_books
Статья объясняет, как в Go обрабатывать сигналы ОС с помощью пакета os/signal.
🔹 signal.Notify(ch, signals...) — подписывает канал ch на сигналы
🔹 signal.Stop(ch) — отписывает
📦 Пример:
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
<-ch
fmt.Println("Получен сигнал")
📦 Для корректного завершения (graceful shutdown) можно после SIGINT вызвать signal.Stop, остановить приём новых задач и дождаться завершения текущих.
🔗 Подробнее: https://www.calhoun.io/using-signals-with-go/
@golang_books